home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / watcom / w_modex / fixed32.hpp < prev    next >
C/C++ Source or Header  |  1994-02-02  |  1KB  |  42 lines

  1. #ifndef FIXEDPOINT_HPP
  2.     #define FIXEDPOINT_HPP
  3.  
  4. typedef long Fixed32;          // 16.16 FixedPoint
  5. typedef unsigned char Iangle;  // Integer angle (0..255)
  6.  
  7. /* Macros for Type Conversion */
  8. #define INT_TO_FIXED(x) ((x) << 16)
  9. #define FIXED_TO_INT(x) ((x) >> 16)
  10. #define ROUND_FIXED_TO_INT(x) (((x) + 0x8000) >> 16)
  11.  
  12. // Loads Fixed32 datafiles
  13. void initFixed32(void);
  14.  
  15. // Common math functions
  16. Fixed32 FixedMul(Fixed32 num1, Fixed32 num2);
  17. Fixed32 FixedDiv(Fixed32 numer, Fixed32 denom);
  18. void CosSin(Iangle theta, Fixed32 *Cos, Fixed32 *Sin);
  19.  
  20. Fixed32 FixedMulASM(Fixed32 num1, Fixed32 num2);
  21. #pragma aux FixedMulASM =   \
  22.     "imul edx"              \
  23.     "add eax, 8000h"        \
  24.     "adc edx, 0"            \
  25.     "shrd eax, edx, 16"     \
  26.     parm caller [eax] [edx] \
  27.     value [eax]             \
  28.     modify [eax edx];
  29.  
  30. Fixed32 FixedDivASM(Fixed32 numer, Fixed32 denom);  // No rounding!
  31. #pragma aux FixedDivASM =   \
  32.     "xor eax, eax"          \
  33.     "shrd eax, edx, 16"     \
  34.     "sar edx, 16"           \
  35.     "idiv ebx"              \
  36.     parm caller [edx] [ebx] \
  37.     value [eax]             \
  38.     modify [eax ebx edx];
  39.  
  40. #endif
  41.  
  42.